package JavaSEAdvance.day07_Exception.D703_HomeWork;

import java.util.ArrayList;

/**
 * @author Xiao
 * @date 2021/7/24
 */
public class StudentTest {
    /**
     * 4. 分析以下需求，并用代码实现
     * 1.定义学生类（String name、int age、int score）
     * 2.定义测试类,进行测试
     * (1)创建5个学生对象存入ArrayList集合中
     * (2)打印最高分的学员姓名、年龄、成绩  [要求封装1个方法  参数是集合对象   返回值类型为Student]
     * (3)打印5个学生的总成绩和平均分		 [要求封装一个方法完成]
     * (4)打印不及格的学员信息及数量		 [要求封装一个方法完成]
     */
    public static void main(String[] args) {
        //(1)创建5个学生对象存入ArrayList集合中
        Student stu1 = new Student("阿良1号", 21, 30);
        Student stu2 = new Student("阿良2号", 23, 60);
        Student stu3 = new Student("阿良3号", 25, 90);
        Student stu4 = new Student("阿良4号", 24, 45);
        Student stu5 = new Student("阿良5号", 26, 75);
        ArrayList<Student> list = new ArrayList<>();
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        list.add(stu4);
        list.add(stu5);
        //(2)打印最高分的学员姓名、年龄、成绩  [要求封装1个方法  参数是集合对象   返回值类型为Student]
//        Student stu = getMaxScore(list);
        Student stu = getMaxScore1(list);
        System.out.println("最高分的学员信息如下：");
        System.out.println(stu.toString());
        System.out.println("----------");
        //(3)打印5个学生的总成绩和平均分		 [要求封装一个方法完成]
        printSumAveScore(list);
        System.out.println("----------");
        //(4)打印不及格的学员信息及数量		 [要求封装一个方法完成]
        printScoreUnder60(list);
    }

    private static Student getMaxScore1(ArrayList<Student> list) {
//        int maxScore = list.get(0).getScore();
        Student stu = list.get(0);
        for (Student student : list) {
//            if (student.getScore() > maxScore) {
//                maxScore = student.getScore();
            if (student.getScore() > stu.getScore()) {
                stu = student;
            }
        }
        return stu;
    }

    /**
     * 打印不及格的学员信息及数量
     */
    private static void printScoreUnder60(ArrayList<Student> list) {
        boolean flag = false;
        for (Student stu : list) {
            if (stu.getScore() < 60) {
                flag = true;
                break;
            }
        }
        if (flag) {
            System.out.println("不及格的学员信息如下：");
            int count = 0;
            for (Student stu : list) {
                if (stu.getScore() < 60) {
                    System.out.println(stu.toString());
                    count++;
                }
            }
            System.out.println("----------");
            System.out.println("不及格的学员数量：" + count);
            return;
        }
        System.out.println("本次考试没有不及格的学员");
    }

    /**
     * 打印5个学生的总成绩和平均分
     */
    private static void printSumAveScore(ArrayList<Student> list) {
        int sum = 0;
        for (Student student : list) {
            sum += student.getScore();
        }
        int ave = sum / list.size();
        System.out.println("总成绩：" + sum);
        System.out.println("平均分：" + ave);
    }

    /**
     * 获取集合中分数最高的学生对象
     */
    private static Student getMaxScore(ArrayList<Student> list) {
        try {
            int max = list.get(0).getScore();
            int index = 0;
            for (int i = 1; i < list.size(); i++) {
                Student stu = list.get(i);
                if (max < stu.getScore()) {
                    max = stu.getScore();
                    index = i;
                }
            }
            return list.get(index);
        } catch (NullPointerException e) {
            e.printStackTrace();
            System.out.println("请先将学生对象添加到集合");
            return new Student("阿良", -1, -1);
        }
    }
}
